CodeSandboxでFirebase authendicationを使ってみる
使う題材
react-firebase-hooksを使ってみた(Auth Hooks編) - Qiita
使うライブラリ
/emoji/react.icon
React Firebase Hooks
/icons2/Bulma.icon
2020-11-27 17:52:39
前回使ったsandboxをforkしてつかう
17:56:55 した
/icons2/CodeSandBox.iconhttps://codesandbox.io/s/gallant-sid-7fj97
18:39:45 再開
18:40:35 Login pageを作る
LoginとLogoutは別途自分でcustom Hooksを作ったほうがいいな
19:03:05 再開
19:07:43 Login.tsxをコピペした
19:09:35 Logout.tsxをコピペした
19:13:28  App.tsx整理した
19:13:22 これAccount作成画面がないのか
作るか。
Firebase Authenticationの使い方をまず調べないと
19:18:08 FirebaseUIを使うと、簡単に認証画面を作れるようだ
19:22:37 とりあえずcreateUserWithEmailAndPasswordを使えばいいっぽい
from https://firebase.google.com/docs/auth/web/start?hl=ja#sign_up_new_users
Login.tsxをコピペしてSignin.tsxを作った
19:23:27 Email loginを有効にしたらtestしてみる
19:28:31 account作成成功!
19:28:36 firebase authendication consoleからuser情報見れるな
mail address
uid
流石にパスワードは見れなかった
パスワード再設定メールを送信できるみたい
やってみよう
19:29:39 送った
19:29:41 きた
project nameの設定をしていないからか、app名が怪しいものになってる
19:30:42 再設定した
19:30:39 ちゃんと同じメールアドレスで複数のaccountを作れないようになっている
The email address is already in use by another account.ってでた
19:54:28 複数タブを開いていたときに、認証状態がきちんと同期されるかチェックする
ログイン状態は維持されるみたい
ログインした後、新しいタブで開いたら、既にログインされている状態だった
一方のタブでログアウトしたら、もう一方のタブも自動的にログアウトされた
きちんと同期されているようだ
19:56:12 複数のlog in optionを用意する場合は、FirebaseUIを使ったほうがよさそう
尤もtakker-schedulerには必要ないか。
20:39:21 Log in/Log outのcustom hookを作る
20:48:38 なんかmount?にuseRef()をつかっているんだよね
これどういう意味があるんだろ?
やりたいことは、componentがmountされているかどうかを表すことなんだろうけど
必要かなそれ?
20:54:41 全部のfileからなくしてみる
なくしてみたらこういうerrorが出た
Warning: Can't perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup function.
21:04:00 warningの原因
formの送信ボタンを押すことで、log in処理をする非同期関数onSubmitが呼ばれる
その中でlog in処理関数を呼ぶのだが、それが成功すると、即座にApp.tsxで監視している認証状態が変更され、renderingするcomponentが<Login />から<Logout />に切り変わる
すると、onSubmitの終了を待たずにLoginがunmountされてしまう
log in 処理関数を実行した後いくつかsetStateを呼び出すが、既にunmountされているcomponentの状態を更新することになってしまうため、このようなwarningが発生する
ここでのuseRef()の必要性がやっとわかった
これuseMountState()とかいうcustom hookにして外に出したほうがよさそうだな
21:46:14 作った
code:useMountState.ts
import * as React from 'react';
export const useMountState = () => {
const mounted = React.useRef(true);
// unmountされたことを検知する
React.useEffect(() => {
const cleanup = () => {
mounted.current = false;
};
return cleanup;
}, []);
return mounted.current;
};
うまく動いた。よさそう
useMountState
解説見つけた
React HooksのuseEffectパターン集 - Qiita
https://ja.reactjs.org/docs/hooks-reference.html#useref
21:50:50 なんかLogin/Logoutのhook作らなくてもよさそうな気がした
何度も使うところじゃないし
だいぶFirebaseの認証方法に依存しちゃいそう
20:41:29 Firebase Authenticationの認証関数のerrorの型
22:05:48 とりあえず大方のAPIの使い方は一通りわかったかな?
React Firebase Hooksの使い方がまだページにまとめきれていないけど
まあ記録はしたので大丈夫
次のステップ
Firebase AuthenticationとCloud firestoreを組み合わせて、minimumな何かを作る
適当にdataを作って、リストに表示できるようにする
これが終わったら、いよいよtakker-schedulerの開発に取り掛かりたい
#2020-11-27 17:52:12